<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>new 操作符具体做了什么</title>
</head>
<body>
    
</body>
<script>
    function create (fn, ...args) {
        // 1.创建一个空对象
        const obj = {}
        // 2.设置对象的原型链：new 会将新对象的 [[Prototype]] 设置为构造函数的 prototype 对象。
        // 这个过程意味着新对象会继承构造函数的所有实例属性和方法。
        Object.setPrototypeOf(obj, fn.prototype)
        // 3.绑定构造函数的 this：new 操作符会将构造函数中的 this 绑定到新创建的对象上。
        // 构造函数中所有用 this 设置的属性都会被添加到新对象上。
        const res = fn.apply(obj, args)
        // 4.执行构造函数：构造函数的代码被执行，初始化对象的属性。
        // 5.返回新对象：如果构造函数没有显式返回一个对象，new 会默认返回新创建的对象。
        return res instanceof Object ? res : obj
    }
    function fn (age, name) {
        this.name = name
        this.age = age
        return 1
    }
    console.log(create(fn,100, '小明'))
</script>
</html>